package com.starsea.book.utils;

import android.os.Build;

import com.blankj.utilcode.util.LogUtils;

import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;


public class EncryptUtil {

//
//    /**
//     * SM4加解密KEY
//     */
//    public static final String SM4_KEY = "SCMECKN2WEA3YIN1";
//
//    /**
//     * 解密
//     *
//     * @param data 加密数据
//     * @param key  密钥
//     * @return
//     */
//    public static String decryptSm4(String data, String key) {
//        String str = null;
//        try {
//            if (!TextUtils.isEmpty(data)) {
//                SymmetricCrypto sm4 = null;
//                if (!TextUtils.isEmpty(key)) {
//                    sm4 = new SymmetricCrypto("SM4", key.getBytes());
//                } else {
//                    sm4 = new SymmetricCrypto("SM4", SM4_KEY.getBytes());
//                }
//                str = sm4.decryptStr(data, CharsetUtil.CHARSET_UTF_8);
//            }
//        } catch (Exception e) {
//            str = null;
//        }
//        return str;
//    }
//
//    /**
//     * 加密
//     *
//     * @param data
//     * @param key
//     * @return
//     */
//    public static String encryptSm4(String data, String key) {
//        String str = null;
//        try {
//            LogUtils.e(">>>> ", data.toString());
//            if (!TextUtils.isEmpty(data)) {
//                SymmetricCrypto sm4 = null;
//                if (!TextUtils.isEmpty(key)) {
//                    sm4 = new SymmetricCrypto("SM4", key.getBytes());
//                } else {
//                    sm4 = new SymmetricCrypto("SM4", SM4_KEY.getBytes());
//                }
//                str = sm4.encryptHex(data, CharsetUtil.CHARSET_UTF_8);
//            }
//        } catch (Exception e) {
//            LogUtils.e(">>>> ", e.toString());
//            str = null;
//        }
//
//        LogUtils.e(">>>> ", "" + str);
//        return str;
//    }
//
//    /**
//     * 随机秘钥
//     *
//     * @return
//     */
//    public static String getKey() {
//        int len = 16;
//        int f = 0;
//        char[] pwd = new char[len];
//        for (int i = 0; i < len; i++) {
//            // 随机生成0，1，2三个数中的一个f，作为判断条件
//            f = (int) (Math.random() * 3);
//            if (f == 0) {
//                // 生成0-9之间的随机数字
//                pwd[i] = (char) ('0' + Math.random() * 10);
//            } else if (f == 1) {
//                // 随机生成一个小写字母
//                pwd[i] = (char) ('a' + Math.random() * 26);
//            } else
//                // 随机生成一个大写字母
//                pwd[i] = (char) ('A' + Math.random() * 26);
//
//        }
//        return new String(pwd);
//    }

    // 固定的加密Key
    private static final String SM4_KEY = "SCMECKN2WEA3YIN1";

    // SM4 的算法名
    private static final String ALGORITHM_NAME = "SM4";

    public static String encrypt(String data) {
        try {
            Cipher cipher = Cipher.getInstance("AES");
            SecretKeySpec secretKey = new SecretKeySpec(SM4_KEY.getBytes(), "AES");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] encryptedData = cipher.doFinal(data.getBytes());
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                return Base64.getEncoder().encodeToString(encryptedData);
            }else return "";
        } catch (Exception e) {
            LogUtils.e(">>> 加密失败");
//            throw new AppException("加密失败", e);
            return "加密失败";
        }
    }

    // 解密
    public static String decrypt(String encryptedData) {
        try {
            Cipher cipher = Cipher.getInstance("AES");
            SecretKeySpec secretKey = new SecretKeySpec(SM4_KEY.getBytes(), "AES");
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            byte[] decryptedData = new byte[0];
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
                decryptedData = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
            }
            return new String(decryptedData);
        } catch (Exception e) {
            LogUtils.e(">>> 解密失败");
//            throw new CustomException("解密失败", false);
            return "解密失败";
        }
    }

//    public static void main(String[] args) {
//        try {
//            String password = "MySecretPassword";
//            String encryptedPassword = encrypt(password);
//            System.out.println("Encrypted Password: " + encryptedPassword);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }

}
